java在tomcat7上运行shell脚本
为了修复tomcat7服务器的文件权限,我已经绞尽脑汁两天了。我有一个库类(.jar文件包含在myapp/WEB-INF中),它需要运行shell脚本。该库由我编写,在NetBeans ie中运行良好。在创建、读取和删除文件方面没有任何麻烦。这是因为NetBeans以blumonkey(我在Ubuntu系统上的用户名)的身份运行该程序。但当我将其导入tomcat并运行它时,tomcat“执行”命令,不产生明确的输出,尝试检查文件(脚本成功时将生成该文件),并抛出FileNotFoundException
详情如下:
- Tomcat7使用apt get安装,其数据位于两个位置-/var/lib/Tomcat7和conf和webapps文件夹,以及/usr/share/Tomcat7和bin和lib文件夹
- 用户上传一个文件。存储到/home/blumonkey/data的zip文件。程序的其余部分在存储在此处的文档上运行。显然,tomcat上传的所有新文件夹/文件的所有者都是tomcat7李>
- 我尝试过将所有权更改为blumonkey,将tomcat7添加到blumonkey用户组,但没有一种方法奏效(在这里的某个地方,我可能不小心将更改权限弄糟了:/)。显然,tomcat7无法处理其拥有的文件。(这怎么可能?)李>
- 当我在终端中运行脚本时,它会工作。但是当我运行
sudo -u tomcat7 script.sh
时,它就不起作用了。它只是在没有消息的情况下退出。我怀疑这是否是正在发生的事情,因为我试图通过重定向ProcessBuilder
中的错误和输出进行调试,但结果是空的李>
任何关于如何解决问题并使脚本运行的帮助都将不胜感激。如果您需要更多信息,请发表评论
用于脚本执行的代码
private static void RunShellCommandFromJava(String command,String fn, String arg1,String arg2) throws Exception
{
try
{
System.out.println(System.getProperty("user.name"));
ProcessBuilder pbuilder = new ProcessBuilder("/bin/bash",command,fn,arg1,arg2);
System.out.println(pbuilder.command());
pbuilder.redirectErrorStream(true);
Process p = pbuilder.start();
p.waitFor();
}
catch(Exception ie)
{
throw ie;
}
}
需要执行的命令
"/bin/bash /abs/path/to/script.sh /abs/path/to/doc/in/data-folder maxpages=30 maxsearches=3"
PS:我已经回答了this问题,但没有帮助。我还尝试了其他选项,如Runtime.exec()
、bash
、/bin/bash/
和/bin/bash/ -c
,其中一些根本不起作用,另一些则没有结果
# 1 楼答案
尝试使用
Runtime
并检查标准错误以找出问题所在(可能是权限或路径):